package main

import "sync"

/**
通道默认是双向的，并不会区分发送和接收端。但某些时候，
我们可以限制收发操作的方向来获取更严谨的操作逻辑。
尽管可用make创建单向通道，但那没有任何意义，
通常使用类型转换来获取单向通道，并分别富裕操作双方
 */
func main() {
	var wg sync.WaitGroup
	wg.Add(2)

	c:=make(chan int)
	var send chan <- int = c
	var recv <- chan int =c
	go func() {
		defer wg.Done()
		for x:=range recv{
			println(x)
		}
	}()

	go func() {
		defer wg.Done()
		defer close(c)
		for i := 0; i < 3; i++ {
			send <- i
		}
	}()
	wg.Wait()
}
